package com.base.http

import io.reactivex.Observer
import io.reactivex.disposables.Disposable

/**
 * 这个类封装的是线性调度监听 所有结果都是以IEntity为基类
 * 现在默认请求成功的code为200
 */
open class HttpListener<M> constructor(private val request: Int = 0) : Observer<IEntity<M>> {

    override fun onSubscribe(d: Disposable) {}

    final override fun onNext(model: IEntity<M>) {
        if (model.code == 200) {
            onResponse(request, model.data)
        } else {
            onError(request, Throwable("未知异常"), model.code)
        }
        onComplete()
    }

    final override fun onError(e: Throwable) {
        onError(request, e, -1)
        onComplete()
    }

    /**
     * @param model 数据模型
     */
    open fun onResponse(request: Int, model: M?) {}

    /**
     * 请求异常回调 除code =200外的所有请求都算作异常请求 可以和后天协商code的返回模型
     * @param e 异常描述
     * @param code 错误代码
     */
    open fun onError(request: Int, e: Throwable?, code: Int) {}

    /**
     * 请求完成后回调
     */
    override fun onComplete() {}


}